package com.cloudfun.campusshare.common.model.dto;

import com.cloudfun.campusshare.common.constant.miniprogram.WeChatReturnCode;
import com.cloudfun.campusshare.common.constant.miniprogram.WeChatTradeState;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import lombok.Data;

/**
 * 扣款结果通知: https://pay.weixin.qq.com/wiki/doc/api/pap.php?chapter=18_7
 * 普通支付通知: https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7
 * <p>
 * Created by Huqin on 2020/4/21
 */
@Data
public class WeChatPaymentNotifyDTO extends WeChatNotifyBaseDTO {

    /**
     * 请求appid
     * appid是商户在微信申请公众号或移动应用成功后分配的帐号ID，
     * 登录平台为mp.weixin.qq.com或open.weixin.qq.com
     */
    @JacksonXmlProperty(localName = "appid")
    private String appId;

    /**
     * 商户号
     * 商户号是商户在微信申请微信支付成功后分配的帐号ID，登录平台为pay.weixin.qq.com
     */
    @JacksonXmlProperty(localName = "mch_id")
    private String merchantId;

    /**
     * 微信支付分配的终端设备号，
     */
    @JacksonXmlProperty(localName = "device_info")
    private String deviceInfo;

    /**
     * 随机字符串
     * 随机字符串，不长于32位
     */
    @JacksonXmlProperty(localName = "nonce_str")
    private String nonceStr;

    /**
     * 签名
     * 随机字符串，不长于32位
     */
    @JacksonXmlProperty(localName = "sign")
    private String sign;

    /**
     * 签名类型，目前支持HMAC-SHA256和MD5，默认为MD5
     */
    @JacksonXmlProperty(localName = "sign_type")
    private String signType;

    /**
     * 业务结果
     * SUCCESS/FAIL
     */
    @JacksonXmlProperty(localName = "result_code")
    private WeChatReturnCode resultCode;

    /**
     * 错误代码
     * 错误返回的信息描述
     */
    @JacksonXmlProperty(localName = "err_code")
    private String errCode;

    /**
     * 错误代码描述
     * 错误返回的信息描述
     */
    @JacksonXmlProperty(localName = "err_code_des")
    private String errCodeDes;

    /**
     * 用户标识
     * 用户在商户appid下的唯一标识
     */
    @JacksonXmlProperty(localName = "openid")
    private String openId;

    /**
     * 用户是否关注公众账号，Y-关注，N-未关注
     */
    @JacksonXmlProperty(localName = "is_subscribe")
    private String isSubscribe;

    /**
     * 交易类型
     * JSAPI、NATIVE、APP
     */
    @JacksonXmlProperty(localName = "trade_type")
    private String tradeType;

    /**
     * 付款银行
     * 银行类型，采用字符串类型的银行标识，银行类型见银行列表
     */
    @JacksonXmlProperty(localName = "bank_type")
    private String bankType;

    /**
     * 总金额
     * 订单总金额，单位为分(trade_state为SUCCESS和REFUND时才有返回)
     */
    @JacksonXmlProperty(localName = "total_fee")
    private Integer totalFee;

    /**
     * 应结订单金额
     */
    @JacksonXmlProperty(localName = "settlement_total_fee")
    private Integer settlementTotalFee;

    /**
     * 货币类型
     */
    @JacksonXmlProperty(localName = "fee_type")
    private String fee_type;

    /**
     * 现金支付金额
     * 现金支付金额订单现金支付金额，详见支付金额
     */
    @JacksonXmlProperty(localName = "cash_fee")
    private Integer cashFee;


    /**
     * 货币类型
     */
    @JacksonXmlProperty(localName = "cash_fee_type")
    private String cashFeeType;

    /**
     * 交易状态
     * SUCCESS—支付成功
     * REFUND—转入退款
     * NOTPAY—未支付
     * CLOSED—已关闭
     * ACCEPT—已接收，等待扣款
     * PAY_FAIL--支付失败(其他原因，如银行返回失败)
     */
    @JacksonXmlProperty(localName = "trade_state")
    private WeChatTradeState tradeState;

    /**
     * 微信支付订单号
     * 现金支付金额订单现金支付金额，详见支付金额
     */
    @JacksonXmlProperty(localName = "transaction_id")
    private String transactionId;

    /**
     * 商户订单号
     * 商户系统的订单号，与请求一致。
     */
    @JacksonXmlProperty(localName = "out_trade_no")
    private String outTradeNo;

    /**
     * 商家数据包
     * 商家数据包，原样返回
     */
    @JacksonXmlProperty(localName = "attach")
    private String attach;

    /**
     * 支付完成时间
     * 支付完成时间，格式为yyyyMMddHHmmss，如2009年12月25日9点10分10秒表示为20091225091010。
     */
    @JacksonXmlProperty(localName = "time_end")
    private String timeEnd;

    /**
     * 委托代扣协议id
     * 签约成功后，微信返回的委托代扣协议id
     */
    @JacksonXmlProperty(localName = "contract_id")
    private String contractId;

}
